1657C - Bracket Sequence Deletion - CodeForces Solution


greedy

Please click on ads to support us..

Python Code:

import os
import sys 
import math
import random
from io import BytesIO, IOBase

f = 1

def isPal(s):
    i = 0
    j = len(s) - 1
    while(i < j):
        if s[i] != s[j]:
            return False
        i += 1
        j -= 1
    return True

def solve():
    n = int(input())
    s = input()
    ans = 0
    temp = ""
    i = 0
    while(i < n):
        temp += s[i]
        if len(temp) > 1:
            if isPal(temp) == True:
                ans += 1
                temp = ""
        else:
            if temp == "(" and i != n-1 and s[i+1] == ")":
                ans += 1
                temp = ""
                i += 1
        i += 1

    print(ans, len(temp))


BUFSIZE = 8192


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)

class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")

sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")

if(os.path.exists('input.txt')):
    sys.stdin = open("input.txt","r")
    sys.stdout = open("output.txt","w")


if __name__ == "__main__":
    if f == 1:
        t = int(input())
        while(t):
            solve(); t -= 1
    else: solve() 

C++ Code:

#include<bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define endl '\n'
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
using namespace std;


const int N = 2e5+5;
using LL = long long;
vector <char> st1, st2;

void solve(){
	int n;
	string s;
	cin >> n >> s;
//	cout << n << endl  << s << endl;
	st1.clear(); 
	st2.clear();
	int idx1 = 0, idx2 = 0, cnt = 0;
	while(idx2 < n){

		if(st1.empty() || st2.empty()){
			st1.pb(s[idx2]);
			st2.pb(s[idx2]);
			idx2++;
			continue;
		}
		
		if(st1.size() > 0 && s[idx2] == ')' && st1.back() == '(' )st1.pop_back();	
		else st1.pb(s[idx2]);
		
		if(s[idx2] == st2.back())st2.pop_back();
		else st2.pb(s[idx2]);
		
		if(st1.size() == 0 || st2.size() == 0 || (st2.size() == 3 && st2.front() == st2.back())){
			cnt++;
			idx1 = idx2;
			st1.clear();
			st2.clear();
		}
		idx2++;
	} 
	if(idx1 == 0)cout << 0 << " " <<n << endl;
	else cout << cnt << " " << n-idx1-1 << endl;

}

int main(){
	IOS
	int T;
	cin >> T;
	while(T--)solve();

    return 0;
}



Comments

Submit
0 Comments
More Questions

1302. Deepest Leaves Sum
1209. Remove All Adjacent Duplicates in String II
994. Rotting Oranges
983. Minimum Cost For Tickets
973. K Closest Points to Origin
969. Pancake Sorting
967. Numbers With Same Consecutive Differences
957. Prison Cells After N Days
946. Validate Stack Sequences
921. Minimum Add to Make Parentheses Valid
881. Boats to Save People
497. Random Point in Non-overlapping Rectangles
528. Random Pick with Weight
470. Implement Rand10() Using Rand7()
866. Prime Palindrome
1516A - Tit for Tat
622. Design Circular Queue
814. Binary Tree Pruning
791. Custom Sort String
787. Cheapest Flights Within K Stops
779. K-th Symbol in Grammar
701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST